package modelo;
/**
 * Clase que modela al mapa del juego, es decir el tablero o grilla por el que se mueve el robot
 * @author Francisco Barreneche
 *
 */
public class Mapa {
	public static final int CANT_COLUMNAS = 14, CANT_FILAS = 12;
	
	protected Celda[][] tablero;
	
	
	/**
	 * Constructor que permite crear un mapa vacio de dimenciones CANT_FILAS x CANT_COLUMNAS
	 */
	public Mapa() {
		
		this.tablero = new Celda[Mapa.CANT_FILAS][Mapa.CANT_COLUMNAS];
	}
	
	
	/**
	 * Permite obtener una celda del tablero
	 * @param x La fila de la celda
	 * @param y La columna de la celda
	 * @return En caso de existir, retorna la celda en (x,y), retorna nulo en caso contrario
	 */
	public Celda obtenerCelda(int x, int y) {
		if(x>=0 && x<Mapa.CANT_FILAS && y>=0 && y<Mapa.CANT_COLUMNAS)
			return this.tablero[x][y];
		else return null;
	}
	
	/**
	 * Metodo que permite obtener la celda adyacente a la celda indicada, que se encuentra ubicada en al direccion contraria a la direccion tambien indicada
	 * @param c La celda en cuestion
	 * @param direccion La direccion en cuestion
	 * @return Una celda que es adyacente a c, ubicada en la direccion contraria a direccion. Si dicha celda no existiese retorna nulo.
	 */
	public Celda obtenerCeldaAdyacente(Celda c, int direccion) {
		int x = c.obtenerX();
		int y = c.obtenerY();
		Celda aRet = null;		
		if(direccion == Robot.DERECHA) aRet = this.obtenerCelda(x, y-1);
		if(direccion == Robot.IZQUIEDA) aRet = this.obtenerCelda(x, y+1);
		if(direccion == Robot.ARRIBA) aRet = this.obtenerCelda(x+1,y);
		if(direccion == Robot.ABAJO) aRet = this.obtenerCelda(x-1,y);
		return aRet;
	}
	
	/**
	 * Metodo que permite agregar la celda indicada al mapa
	 * @param c La celda a ser agregada
	 */
	public void establecerCelda(Celda c){
		tablero[c.obtenerX()][c.obtenerY()] = c;
	}
}
